package com_.dxy_test_.testgeotools;

import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;

/**
 * @Description GIS开发测试
 * @Author dangxianyue
 * @Date 2024/5/24 00:11
 */
public class Test {

    // 参考资料：
    // GeoJSON格式介绍：https://blog.csdn.net/qq_35987023/article/details/131521074
    // WKT格式介绍：https://blog.csdn.net/weixin_44912902/article/details/131844768

    // Point（点） – 表示一个具有一组地理坐标的点
    // LineString（线） – 表示一个由线段组成的路径
    // Polygon（面）-- 包括由线形环组成的封闭面
    // MultiPoint（多个点） – 包含多个点的集合
    // MultiLineString（多条线） – 包含多条线的集合
    // MultiPolygon（多个面） – 包含多个面的集合
    // GeometryCollection（几何图元集合） – 包含多个简单几何对象的集合
    // Feature（要素） – 表示一个要素，包含一个几何图元和其他属性
    // FeatureCollection（要素集） – 包含多个要素的集合
    // { "type": "Feature",
    //   "geometry": {
    //     "type": "Point",
    //     "coordinates": [104.0, 30.0]
    //   },
    //   "properties": {
    //     "name": "test point"
    //   }
    // }
    // "type":"Feature" 表示这是一个要素对象。
    // "geometry" 包含着要素对象的几何信息，
    // "properties" 包含着要素对象的其他属性。
    // "geometry" 对象中的 "type":"Point" 表示这是一个点对象，
    // "coordinates" 数组则包含着该点的经纬度坐标对

    // 点geojson
    private static String pointGeoJson = "{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[113.817563,23.279552]},\"properties\":{\"name\":\"增城广场\"}}";
    // 线geojson
    private static String lineGeoJson = "{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[113.817563,23.279552],[113.473979,23.1618],[113.405528,23.164779],[113.324553,23.106414]]},\"properties\":{\"name\":\"增城到天河出行路线\",\"description\":\"起点增城广场，途径PCI未来社区、佳都智慧大厦，终点广州塔\"}}";

    public static void main(String[] args) {
        // getPointWkt();
        getLineWkt();
    }

    public static void getPointWkt() {
        // // Point（点）
        // {
        //     "type": "Point",
        //     "coordinates": [104.6, 30.1]
        // }
        double[] point = new double[]{113.817563, 23.279552};
        GeometryFactory gf = new GeometryFactory();
        Geometry geometry = gf.createPoint(new Coordinate(point[0], point[1]));
        System.out.println(geometry.toText());
    }

    public static void getLineWkt() {
        // // LineString（线）
        // {
        //     "type": "LineString",
        //     "coordinates": [
        //         [104.6, 30.1],
        //         [104.7, 30.2],
        //         [104.8, 30.3]
        //     ]
        // }
        double[] point1 = new double[]{113.324553, 23.106414};
        double[] point2 = new double[]{113.405528, 23.164779};
        double[] point3 = new double[]{113.473979, 23.1618};
        double[] point4 = new double[]{113.817563, 23.279552};
        Coordinate[] coordinates = new Coordinate[]{
                new Coordinate(point1[0], point1[1]),
                new Coordinate(point2[0], point2[1]),
                new Coordinate(point3[0], point3[1]),
                new Coordinate(point4[0], point4[1])
        };
        GeometryFactory gf = new GeometryFactory();
        Geometry geometry = gf.createLineString(coordinates);
        System.out.println(geometry.toText());
    }

}
